Modern software development is evolving away from the client-server model toward “cloud”-based processing systems that provide access to data and services via the Internet or other networks. In contrast to prior systems that hosted networked applications on dedicated server hardware, the cloud computing model allows applications to be provided over the network “as a service” supplied by an infrastructure provider. The infrastructure provider typically abstracts the underlying hardware and other resources used to deliver a customer-developed application so that the customer no longer needs to operate and support dedicated server hardware. The cloud computing model can often provide substantial cost savings to the customer over the life of the application because the customer no longer needs to provide dedicated network infrastructure, electrical and temperature controls, physical security and other logistics in support of dedicated server hardware.
Although multi-tenant platforms can provide substantial benefits, they can be relatively difficult to design and develop. The often competing demands of integration and isolation between tenants, for example, can lead to any number of challenges in design and implementation. For example, even though multiple tenants share a common server, each tenant may be able to provide data or services to its customers using the tenant's own separate, unique network domain. Furthermore, applications which are accessible by multiple tenants, such as certain report generators, need to maintain data isolation between the multiple tenants.